شرح دورة أساسيات البرمجة الكائنية (OOP)

البرمجة الكائنية التوجه (OOP) هي أسلوب برمجي يعتمد على الكائنات والفئات لتنظيم الكود وتسهيل إعادة استخدامه. في هذه الدورة، سنغطي كل المفاهيم الأساسية والمتقدمة لـ OOP مع أمثلة عملية لفهم كيفية تطبيقها في تصميم البرمجيات.

الدرس الأول: مقدمة في البرمجة الكائنية

البرمجة الكائنية (OOP) هي نمط برمجي يعتمد على الكائنات التي تجمع البيانات والسلوكيات معًا.

شرح مفصل:
  • ما هي OOP؟ أسلوب برمجي يركز على الكائنات بدلاً من الإجراءات، مستخدمًا الفئات كقوالب.
  • لماذا OOP؟ تحسين تنظيم الكود، إعادة الاستخدام، وتسهيل الصيانة.
  • المفاهيم الأساسية:
    • الفئة (Class): قالب لإنشاء الكائنات.
    • الكائن (Object): نسخة فعلية من الفئة.
    • الخصائص (Attributes): البيانات.
    • الوظائف (Methods): السلوكيات.
مثال:
class Car: def __init__(self, brand): self.brand = brand def drive(self): print(f"{self.brand} is driving") my_car = Car("Toyota") my_car.drive() # Toyota is driving

الدرس الثاني: التغليف (Encapsulation)

التغليف يحمي البيانات داخل الكائن ويحد من الوصول المباشر إليها.

شرح مفصل:
  • الخصائص الخاصة: تُسبق بـ __ لجعلها غير قابلة للوصول مباشرة.
  • Getters/Setters: وظائف للوصول إلى البيانات وتعديلها.
  • الفائدة: حماية البيانات وتقليل الأخطاء.
مثال:
class Car: def __init__(self, brand): self.__brand = brand def get_brand(self): return self.__brand def set_brand(self, brand): self.__brand = brand my_car = Car("BMW") print(my_car.get_brand()) # BMW my_car.set_brand("Audi") print(my_car.get_brand()) # Audi

الدرس الثالث: الوراثة (Inheritance)

الوراثة تتيح لفئة جديدة أن ترث خصائص ووظائف فئة أخرى.

شرح مفصل:
  • الفئة الأم (Parent): المصدر.
  • الفئة الابنة (Child): ترث وتوسع.
  • super(): استدعاء الدوال من الفئة الأم.
مثال:
class Vehicle: def __init__(self, brand): self.brand = brand def move(self): print(f"{self.brand} moves") class Car(Vehicle): def honk(self): print("Beep!") my_car = Car("Toyota") my_car.move() # Toyota moves my_car.honk() # Beep!

الدرس الرابع: تعدد الأشكال (Polymorphism)

تعدد الأشكال يسمح للكائنات المختلفة بالاستجابة لنفس الوظيفة بطرق مختلفة.

شرح مفصل:
  • Method Overriding: إعادة تعريف وظيفة في الفئة الفرعية.
  • الفائدة: المرونة في التعامل مع كائنات مختلفة.
مثال:
class Animal: def sound(self): print("Some sound") class Dog(Animal): def sound(self): print("Woof!") class Cat(Animal): def sound(self): print("Meow!") animals = [Dog(), Cat()] for a in animals: a.sound() # Woof! Meow!

الدرس الخامس: التجريد (Abstraction)

التجريد يُركز على إخفاء التفاصيل الداخلية وإظهار الوظائف الأساسية فقط.

شرح مفصل:
  • Abstract Class: فئة لا يمكن إنشاء كائنات منها مباشرة.
  • Abstract Method: وظيفة يجب تطبيقها في الفئات الفرعية.
مثال:
from abc import ABC, abstractmethod class Shape(ABC): @abstractmethod def area(self): pass class Circle(Shape): def __init__(self, radius): self.radius = radius def area(self): return 3.14 * self.radius ** 2 c = Circle(5) print(c.area()) # 78.5

الدرس السادس: الواجهات (Interfaces)

الواجهات تحدد مجموعة من الوظائف التي يجب تطبيقها.

شرح مفصل:
  • الغرض: فصل التصميم عن التطبيق.
  • التطبيق: يتم عبر فئات مجردة في Python.
مثال:
from abc import ABC, abstractmethod class Flyable(ABC): @abstractmethod def fly(self): pass class Bird(Flyable): def fly(self): print("Flying!") b = Bird() b.fly() # Flying!

الدرس السابع: الأنماط التصميمية (Design Patterns)

حلول معيارية لمشاكل شائعة في تصميم البرمجيات.

شرح مفصل:
  • Singleton: نسخة واحدة من الفئة.
  • Factory: إنشاء كائنات دون تحديد الفئة.
  • Observer: مراقبة التغييرات.
مثال (Singleton):
class Singleton: _instance = None def __new__(cls): if cls._instance is None: cls._instance = super().__new__(cls) return cls._instance s1 = Singleton() s2 = Singleton() print(s1 is s2) # True

الدرس الثامن: التعددية في الوراثة (Multiple Inheritance)

الوراثة من أكثر من فئة أم.

شرح مفصل:
  • الاستخدام: دمج خصائص متعددة.
  • المشاكل: تعارض الأسماء (Diamond Problem).
مثال:
class Engine: def start(self): print("Engine started") class Wheels: def roll(self): print("Wheels rolling") class Car(Engine, Wheels): pass my_car = Car() my_car.start() # Engine started my_car.roll() # Wheels rolling

الدرس التاسع: إدارة الذاكرة في OOP

كيفية تخصيص وتحرير الذاكرة للكائنات.

شرح مفصل:
  • Garbage Collection: تحرير الذاكرة تلقائيًا.
  • References: إدارة الإشارات إلى الكائنات.
مثال:
class MyClass: def __init__(self, value): self.value = value obj1 = MyClass(10) obj2 = obj1 print(obj1.value) # 10 del obj1 # لا يزال obj2 يشير إلى الكائن print(obj2.value) # 10

الدرس العاشر: التعامل مع الاستثناءات

إدارة الأخطاء في سياق OOP.

شرح مفصل:
  • try/except: معالجة الأخطاء.
  • Custom Exceptions: إنشاء استثناءات مخصصة.
مثال:
class BankAccount: def __init__(self, balance): self.balance = balance def withdraw(self, amount): if amount > self.balance: raise ValueError("Insufficient funds") self.balance -= amount account = BankAccount(100) try: account.withdraw(150) except ValueError as e: print(e) # Insufficient funds

الدرس الحادي عشر: الخصائص والوظائف الثابتة

الخصائص والوظائف التي تنتمي للفئة وليس للكائنات.

شرح مفصل:
  • Static Methods: باستخدام @staticmethod.
  • Class Methods: باستخدام @classmethod.
مثال:
class MathUtils: @staticmethod def add(a, b): return a + b @classmethod def class_name(cls): return cls.__name__ print(MathUtils.add(3, 4)) # 7 print(MathUtils.class_name()) # MathUtils

الدرس الثاني عشر: التحميل الزائد (Overloading)

تعريف وظائف متعددة بنفس الاسم ولكن بمعاملات مختلفة.

شرح مفصل:
  • ملاحظة: Python لا يدعم التحميل الزائد مباشرة، لكن يمكن محاكاته باستخدام قيم افتراضية.
مثال:
class Calculator: def add(self, a, b=0, c=0): return a + b + c calc = Calculator() print(calc.add(5)) # 5 print(calc.add(5, 3)) # 8 print(calc.add(5, 3, 2)) # 10

الدرس الثالث عشر: العلاقات بين الكائنات

كيفية ارتباط الكائنات ببعضها (تجميع، تركيب، ارتباط).

شرح مفصل:
  • Association: علاقة عامة بين كائنات.
  • Aggregation: "يحتوي على" (ضعيفة).
  • Composition: "جزء من" (قوية).
مثال (Composition):
class Engine: def start(self): print("Engine started") class Car: def __init__(self): self.engine = Engine() def drive(self): self.engine.start() print("Car is driving") my_car = Car() my_car.drive()

الدرس الرابع عشر: التطبيقات العملية لـ OOP

تطبيق شامل يجمع المفاهيم السابقة.

شرح مفصل:
  • مثال عملي: نظام إدارة مكتبة.
مثال:
class Book: def __init__(self, title, author): self.title = title self.author = author def info(self): return f"{self.title} by {self.author}" class Library: def __init__(self): self.books = [] def add_book(self, book): self.books.append(book) def list_books(self): for book in self.books: print(book.info()) lib = Library() lib.add_book(Book("Python 101", "Ali")) lib.add_book(Book("OOP Basics", "Ahmed")) lib.list_books()